package com.xdu.medical;

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.concurrent.Task;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

public class MainApp_bak extends Application {

    private ImageView originalImageView;
    private ImageView resultImageView;
    private TextArea textArea;
    private Image selectedImage; // 存储选择的图片
    private File selectedFile; // 存储选择的文件
    private ProgressBar progressBar; // 进度条
    private StackPane resultPane; // 用于叠放图片框2和进度条
    private Task<Void> processingTask; // 模拟处理任务

    @Override
    public void start(Stage primaryStage) {
        // 设置窗口图标
        File iconFile = new File("/Users/corry/研究生阶段/项目/挑战杯/pic/icon.webp");
        if (iconFile.exists()) {
            Image icon = new Image(iconFile.toURI().toString());
            primaryStage.getIcons().add(icon);
        } else {
            System.out.println("图标文件不存在: " + iconFile.getAbsolutePath());
        }

        // 创建按钮
        Button selectButton = new Button("选择图片");
        Button startButton = new Button("开始");
        Button clearButton = new Button("清空");
        Button stopButton = new Button("中止");
        Button exportButton = new Button("导出");

        // 创建文本输出框
        textArea = new TextArea();
        textArea.setEditable(false); // 设置为只读
        textArea.setPrefHeight(100);

        // 创建两个图片框
        originalImageView = new ImageView();
        originalImageView.setPreserveRatio(true);

        resultImageView = new ImageView();
        resultImageView.setPreserveRatio(true);

        // 创建进度条
        progressBar = new ProgressBar();
        progressBar.setVisible(false); // 初始隐藏

        // 将图片框2和进度条叠放在一起
        resultPane = new StackPane();
        resultPane.getChildren().addAll(resultImageView, progressBar);
        StackPane.setAlignment(progressBar, Pos.CENTER);

        // 图片框大小绑定到窗口大小
        originalImageView.fitWidthProperty().bind(Bindings.min(
                primaryStage.widthProperty().subtract(40), // 减去左右内边距
                primaryStage.heightProperty().subtract(300) // 减去其他组件高度
        ));
        originalImageView.fitHeightProperty().bind(Bindings.min(
                primaryStage.widthProperty().subtract(40),
                primaryStage.heightProperty().subtract(300)
        ));

        resultImageView.fitWidthProperty().bind(Bindings.min(
                primaryStage.widthProperty().subtract(40),
                primaryStage.heightProperty().subtract(300)
        ));
        resultImageView.fitHeightProperty().bind(Bindings.min(
                primaryStage.widthProperty().subtract(40),
                primaryStage.heightProperty().subtract(300)
        ));

        progressBar.prefWidthProperty().bind(resultImageView.fitWidthProperty());

        // 选择图片按钮事件
        selectButton.setOnAction(event -> {
            FileChooser fileChooser = new FileChooser();
            fileChooser.setTitle("选择图片");
            fileChooser.getExtensionFilters().addAll(
                    new FileChooser.ExtensionFilter("图片文件", "*.png", "*.jpg", "*.jpeg")
            );
            selectedFile = fileChooser.showOpenDialog(primaryStage);
            if (selectedFile != null) {
                String imagePath = selectedFile.toURI().toString();
                textArea.setText("选择的图片路径: " + selectedFile.getAbsolutePath());

                // 显示原始图片到图片框1
                selectedImage = new Image(imagePath, 256, 256, true, true); // 强制调整为 256x256
                originalImageView.setImage(selectedImage);

                // 清空图片框2
                resultImageView.setImage(null);
            }
        });

        // 开始按钮事件
        startButton.setOnAction(event -> {
            if (selectedImage == null || selectedFile == null) {
                textArea.setText("请先选择一张图片！");
                return;
            }

            // 禁用按钮，防止重复点击
            startButton.setDisable(true);
            stopButton.setDisable(false);

            // 显示进度条
            progressBar.setVisible(true);
            resultImageView.setImage(null);

            // 模拟处理任务
            processingTask = new Task<>() {
                @Override
                protected Void call() throws Exception {
                    // 随机延迟 3-5 秒
                    Random random = new Random();
                    int delay = 3000 + random.nextInt(2001); // 3000-5000ms
                    Thread.sleep(delay);
                    return null;
                }
            };

            // 任务完成后的处理
            processingTask.setOnSucceeded(e -> {
                // 隐藏进度条
                progressBar.setVisible(false);
                startButton.setDisable(false);
                stopButton.setDisable(true);

                // 判断文件名是否以 _img 结尾
                String fileName = selectedFile.getName();
                String originalPath = selectedFile.getAbsolutePath();
                if (!fileName.contains("_img.")) {
                    // 不以 _img 结尾，直接显示原图
                    resultImageView.setImage(selectedImage);
                    textArea.setText(originalPath + "\n无病灶");
                } else {
                    // 以 _img 结尾，改后缀为 _amp，尝试多种格式
                    String baseName = fileName.substring(0, fileName.lastIndexOf("_img."));
                    File processedFilePng = new File("/Users/corry/研究生阶段/项目/挑战杯/pic", baseName + "_amp.png");
                    File processedFileJpg = new File("/Users/corry/研究生阶段/项目/挑战杯/pic", baseName + "_amp.jpg");
                    File processedFileJpeg = new File("/Users/corry/研究生阶段/项目/挑战杯/pic", baseName + "_amp.jpeg");

                    File processedFile = null;
                    if (processedFilePng.exists()) {
                        processedFile = processedFilePng;
                    } else if (processedFileJpg.exists()) {
                        processedFile = processedFileJpg;
                    } else if (processedFileJpeg.exists()) {
                        processedFile = processedFileJpeg;
                    }

                    if (processedFile != null) {
                        // 存在改名后的图片，显示该图片
                        Image processedImage = new Image(processedFile.toURI().toString(), 256, 256, true, true);
                        resultImageView.setImage(processedImage);
                        textArea.setText(originalPath + "\n有病灶");
                    } else {
                        // 不存在改名后的图片，显示原图
                        resultImageView.setImage(selectedImage);
                        textArea.setText(originalPath + "\n无病灶");
                    }
                }
            });

            // 任务被取消时的处理
            processingTask.setOnCancelled(e -> {
                progressBar.setVisible(false);
                startButton.setDisable(false);
                stopButton.setDisable(true);
                textArea.setText("已中止");
            });

            // 启动任务
            new Thread(processingTask).start();
        });

        // 清空按钮事件
        clearButton.setOnAction(event -> {
            // 清空所有状态
            textArea.clear();
            originalImageView.setImage(null);
            resultImageView.setImage(null);
            selectedImage = null;
            selectedFile = null;
            progressBar.setVisible(false);
            startButton.setDisable(false);
            stopButton.setDisable(true);
            if (processingTask != null && processingTask.isRunning()) {
                processingTask.cancel();
            }
        });

        // 中止按钮事件
        stopButton.setOnAction(event -> {
            if (processingTask != null && processingTask.isRunning()) {
                processingTask.cancel();
            }
        });
        stopButton.setDisable(true); // 初始禁用

        // 导出按钮事件
        exportButton.setOnAction(event -> {
            if (resultImageView.getImage() == null) {
                textArea.setText("图片框2中没有图片可导出！");
                return;
            }

            FileChooser fileChooser = new FileChooser();
            fileChooser.setTitle("保存图片");
            fileChooser.getExtensionFilters().addAll(
                    new FileChooser.ExtensionFilter("PNG 文件", "*.png"),
                    new FileChooser.ExtensionFilter("JPG 文件", "*.jpg")
            );
            File file = fileChooser.showSaveDialog(primaryStage);
            if (file != null) {
                try {
                    // 将 JavaFX Image 转换为 BufferedImage
                    Image fxImage = resultImageView.getImage();
                    BufferedImage bufferedImage = new BufferedImage(
                            (int) fxImage.getWidth(),
                            (int) fxImage.getHeight(),
                            BufferedImage.TYPE_INT_ARGB
                    );
                    for (int x = 0; x < fxImage.getWidth(); x++) {
                        for (int y = 0; y < fxImage.getHeight(); y++) {
                            int argb = fxImage.getPixelReader().getArgb(x, y);
                            bufferedImage.setRGB(x, y, argb);
                        }
                    }

                    // 保存图片
                    String filePath = file.getAbsolutePath();
                    String format = filePath.endsWith(".png") ? "png" : "jpg";
                    ImageIO.write(bufferedImage, format, file);
                    textArea.setText("图片已保存到: " + filePath);
                } catch (IOException e) {
                    textArea.setText("保存图片失败: " + e.getMessage());
                }
            }
        });

        // 按钮布局（水平排列）
        HBox buttonBox = new HBox(10);
        buttonBox.setPadding(new Insets(10));
        buttonBox.getChildren().addAll(selectButton, startButton, clearButton, stopButton, exportButton);

        // 整体布局
        VBox root = new VBox(10);
        root.setPadding(new Insets(10));
        root.getChildren().addAll(buttonBox, textArea, originalImageView, resultPane);

        // 创建场景
        Scene scene = new Scene(root, 600, 800);
        primaryStage.setTitle("SP-Mamba");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}